Numerous computer software packages and techniques exist for executing tasks on computers. Throughout modern history, a computer scientist would translate a problem into machine-readable code (e.g., a programming language or a mathematical equation) and feed every piece of machine-readable code into a single computer for execution. More recently, computers are grouped together and are used in a distributed-computing fashion. For example, a program may divide up a group of tasks and execute different tasks on separate computers such as servers. Modern distributed computing systems are able to process tremendous amounts of data and calculations quickly and efficiently.
Distributed computing relies upon a system of hardware and/or software to control the distribution of tasks and orchestrate the flow of data between numerous machines in a server cluster. The maestro in distributed-computing systems is referred to as a “load balancer.” Some systems utilize typical or weighted round-robin algorithms for distributing tasks across a group of servers. Going down the list of servers in the group, the round-robin load balancer forwards a client request to each server in turn. Upon reaching the end of the server list, the load balancer simply loops back and goes down the list again, sending the next task to the first listed server and cycling through the server list endlessly. Some load balancers optimize resource usage among the servers by avoiding overloading any single server. Thus, traditional load balancing strategies follow a predetermined order of task distribution, or focus on balancing the CPU and memory loads, as well as disk utilization, between servers in a cluster.
While technically efficient, traditional systems can present a major threat to an organization associated with the server cluster, because they fail to account for the type of tasks being distributed and performed, and only focus on the amount of computing power required to complete the task. Tasks that are very important to the operation of an organization may require very little computer resources to complete, and likewise tasks that are of little importance could require large amounts of computing power. Traditional systems may group large quantities of those important, yet resource-frugal, tasks together in a single server. If that server fails, a significant amount of value to an organization may be lost, whether the value is measured in money, productivity, time-sensitivity, or other measures of importance.
In view of the shortcomings and problems with traditional distributed computing systems, an improved system and method for server load balancing is desired.